package com.wakaca.design.pattern.creational.simplefactory;

/**
 * 视频工厂类
 * Created by wakaca
 */
public class VideoFactory {

    /**
     * 通过 反射 来弥补创建对象的扩展性
     * */
    public Video getVideo(Class c){
        Video video = null;
        try {
            video = (Video) Class.forName(c.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return video;
    }

    /**
     * 通过 type 来得知要创建的视频类型
     * 缺点：如果要增加视频，需要修改这里的实现
     * 如果这里定义为静态方法，那么将无法通过继承来增强行为
     * */
    public Video getVideo(String type){
        if("java".equalsIgnoreCase(type)){
            return new JavaVideo();
        }else if("python".equalsIgnoreCase(type)){
            return new PythonVideo();
        }
        return null;
    }

}
